package com.ruoyi.pcj.service;

import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.pcj.domain.PcjHobby;
import com.ruoyi.pcj.domain.PcjUserHobby;
import com.ruoyi.pcj.dto.match.MatchUserAttrDto;

/**
 * 用户爱好Service接口
 * 
 * @author ms
 * @date 2024-03-12
 */
public interface IPcjUserHobbyService 
{
    /**
     * 查询用户爱好
     * 
     * @param id 用户爱好主键
     * @return 用户爱好
     */
     PcjUserHobby selectPcjUserHobbyById(String id);

    /**
     * 分页查询用户爱好列表
     *
     * @param params 最基本参数{"pageNum":1,"pageSize":10}，其他参数自行定义
     * @return 用户爱好集合
     */
    IPage<PcjUserHobby> selectPcjUserHobbyList(Map<String,Object> params);

    /**
     * 新增用户爱好
     * 
     * @param pcjUserHobby 用户爱好
     * @return 结果
     */
     Boolean insertPcjUserHobby(PcjUserHobby pcjUserHobby);

    /**
     * 修改用户爱好
     * 
     * @param pcjUserHobby 用户爱好
     * @return 结果
     */
     Boolean updatePcjUserHobby(PcjUserHobby pcjUserHobby);

    /**
     * 批量删除用户爱好
     * 
     * @param ids 需要删除的用户爱好主键集合
     * @return 结果
     */
     Boolean deletePcjUserHobbyByIds(String[] ids);
    /**
     * 获取用户爱好
     *
     * @return
     */
    List<PcjUserHobby> getUserHobby();



    /**
     * 对外提供的设置默认字段值，id为空新增，不为空更新
     **/
     void setEntityDefValAuto(PcjUserHobby pcjUserHobby);

     /***
      * key=用户id，value=该用户的兴趣，根据兴趣id集合，筛选出所有符合条件的用户，
      * @param hobbyIds 兴趣id
      * @param matchTargetUserIds 符合目标的用户id集合
      * **/
    Map<Long, List<PcjUserHobby>> getUserHobbyData(List<String> hobbyIds, List<Long> matchTargetUserIds);

    /**
     * 获取用户所有兴趣id
     * @param userId
     * @param allHobbyMap
     * @return
     */
    List<String> getUserHobbyIds(Long userId, Map<String, PcjHobby> allHobbyMap);

    /**
     * 从目标相同的用户id，进一步筛选出与其兴趣相同的用户信息
     * @param userHobbyIds
     * @param equalsTargetUserList 与当前匹配用户目标一直的用户信息
     * @return
     */
    List<MatchUserAttrDto> getEqualsHobbyUserMsg(List<String> userHobbyIds, List<MatchUserAttrDto> equalsTargetUserList);

    /***
     * 保存用户兴趣爱好
     */
    void saveUserHobby(List<PcjUserHobby> hobbyList);

    /**
     * 获取当前用户的兴趣
     * **/
    List<String> getCurUserHobbyIds(Long userId);

    /***
     * 找出与当前匹配用兴趣一致的用户
     * */
    List<MatchUserAttrDto> getAccordHobbyUserIds(List<MatchUserAttrDto> accordTargetUserMsg, List<String> curUserHobbyIds);
}
